<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
/**
 * [creatZip description]
 * @param  string $zipname 要创建的zip文件名 这里需要注意该目录是否存在，并且有创建的权限  
 * @param  array $files   这是要打包的文件地址数组  
 * @return [type]          [description]
 * @author gqf
 */
function creatZip($zipname,$exportPath)
{
	/*
	$zip = new ZipArchive();  
	$res = $zip->open($zipname, ZipArchive::CREATE);  
	if ($res === TRUE) {  
	    foreach ($files as $file) {  
	 	//这里直接用原文件的名字进行打包，也可以直接命名，需要注意如果文件名字一样会导致后面文件覆盖前面的文件，所以建议重新命名  
	     // $new_filename = substr($file, (int)strrpos($file, '/') + 1);  
	     $zip->addFile($file);  
	    }  
	    //关闭文件
		$zip->close();  
	}*/
	$zip = new ZipArchive();  
	//参数1:zip保存路径，参数2：ZIPARCHIVE::CREATE没有即是创建  
	if(!$zip->open($zipname,ZIPARCHIVE::CREATE))  
	{  
	    echo "创建{$zipname}失败<br/>";return;  
	}  
	//echo "创建[$exportPath.zip]成功<br/>";  
	createZip2(opendir($exportPath),$zip,$exportPath);  
	$zip->close(); 
}
/*压缩多级目录 
    $openFile:目录句柄 
    $zipObj:Zip对象 
    $sourceAbso:源文件夹路径 
*/  
function createZip2($openFile,$zipObj,$sourceAbso,$newRelat = '')  
{  
    while(($file = readdir($openFile)) != false)  
    {  
        if($file=="." || $file=="..")  
            continue;  
          
        /*源目录路径(绝对路径)*/  
        $sourceTemp = $sourceAbso.'/'.$file;  
        /*目标目录路径(相对路径)*/  
        $newTemp = $newRelat==''?$file:$newRelat.'/'.$file;  
        if(is_dir($sourceTemp))  
        {  
            //echo '创建'.$newTemp.'文件夹<br/>';  
            $zipObj->addEmptyDir($newTemp);/*这里注意：php只需传递一个文件夹名称路径即可*/  
            $this->createZip(opendir($sourceTemp),$zipObj,$sourceTemp,$newTemp);  
        }  
        if(is_file($sourceTemp))  
        {  
            //echo '创建'.$newTemp.'文件<br/>';  
            $zipObj->addFile($sourceTemp,$newTemp);  
        }  
    }  
}  